import Vue from 'vue';
import request from '@/common/request.js';
import config from '@/common/config.js';
export default {
	namespaced: true,
	state: {
		reconnections: 0,
		isclose:false
	},
	mutations: {

	},
	actions: {
		// 开始或重启即时通讯，全局监听，主要用于系统消息提示
		async start({
			state,
			dispatch,
			rootState
		}) {
			if (!rootState.token) return
			// 如果已连接，关闭重新连接
			uni.onSocketOpen(() => {
				state.isclose = true;
			});
			if (state.isclose) {
				uni.closeSocket();
				uni.onSocketClose((res) => {
					console.log('WanlChat 已关闭！')
				});
			}
			let socketurl = uni.getStorageSync('config')?.socketurl || ''
			if (!socketurl) {
				uni.$off('socketurl')
				uni.$once('socketurl', e => {
					dispatch('start');
				})
			}
			console.log(socketurl);
			// 创建一个 WebSocket 连接
			uni.connectSocket({
				url: socketurl
			});
			// 监听 WebSocket 连接打开事件
			uni.onSocketOpen((res) => {
				console.log('WanlChat 连接已打开！')
			});
			// 监听WebSocket错误。
			uni.onSocketError((res) => {
				console.log('监听WebSocket错误', res);
				// request('api/wanlshop/chat/state', '', 'get').then(res => {
				// 	state.reconnections += 1;
				// 	if (state.reconnections <= 3) {
				// 		uni.showToast({
				// 			title: `IM 连接失败，正尝试第${state.reconnections}次连接`,
				// 			icon: 'loading'
				// 		});
				// 		dispatch('start');
				// 	} else {
				// 		console.error('IM服务器启动正常，客户端已尝试3次重连接，请检查ws和wss是否可以正常访问');
				// 	}
				// })
			});
			uni.onSocketMessage((res) => {
				let data = JSON.parse(res.data);
				// console.log(data);
				if (data.type == 'init') { // 初始化
					// 绑定 client_id 到 uid
					request('/member/message/shake', {
						'client_id': data.client_id
					}).then(res => {
						// uni.setStorageSync("wanlshop:chat_client_id", res);
					})
				} else if (data.type == 'ping') { // 心跳回执
					// 通过 WebSocket 连接发送数据
					// uni.sendSocketMessage({
					// 	data: '{"type":"pong"}'
					// });
				} else if (data.type == 'chat') {
					// 全局通知
					uni.$emit('$onChat', data);
				} else {
					console.log("未知消息: " + JSON.stringify(data))
				}
			});
			// 获取一次聊天列表
		},
		async close() {
			uni.onSocketOpen(() => {
				uni.closeSocket();
			});
			uni.onSocketClose((res) => {
				console.log('WanlChat 已关闭！');
			});
		}
	}
};
